package club.xiaojiawei.strings;

/**
 * @author 肖嘉威
 * @version 1.0
 * @date 5/2/22 2:24 PM
 * @question 151. 颠倒字符串中的单词
 * @description 给你一个字符串 s ，颠倒字符串中 单词 的顺序。
 * 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
 * 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
 * 注意：输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
 */
public class ReverseWords151 {

    public static void main(String[] args) {
        String result = reverseWords("a good   example");
        System.out.println(result);
    }

    /**
     * 双StringBuilder
     * @param s
     * @return
     */
    public static String reverseWords(String s) {
        StringBuilder result = new StringBuilder();
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) != ' '){
                builder.append(s.charAt(i));
                if (i == s.length() - 1){
                    if (result.length() != 0){
                        result.insert(0, " ");
                    }
                    result.insert(0, builder);
                }
            }else if (builder.length() != 0){
                if (result.length() != 0){
                    result.insert(0, " ");
                }
                result.insert(0, builder);
                builder.delete(0, builder.length());
            }
        }
        return result.toString();
    }

    /**
     * StringBuilder+split()
     * @param s
     * @return
     */
    public static String reverseWords2(String s) {
        String[] split = s.trim().split("\s+");
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = split.length - 1; i >= 0; i--) {
            stringBuilder.append(split[i]);
            if (i != 0){
                stringBuilder.append(" ");
            }
        }
        return stringBuilder.toString();
    }

}
